//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#ifndef _ProcessEpitopesAndLINGOs_h__
#define	_ProcessEpitopesAndLINGOs_h__
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#include "LigandEpitopeDataLINGO.h"

#include <fstream>
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
using namespace std;
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
class ProcessEpitopesAndLINGOs {
  
  private:
    
    String*                           filenameIn;
    String*                           filenameOut;
    
    TListE <LigandEpitopeDataLINGO>*  ligandEpitopeLINGO;
    
    String*                           filenameSMI;
    
  protected:
    
    void                              Cleandata (void);   
    void                              SearchRecursiveLINGOCombinations (String&, String&);
    void                              SearchRecursiveLINGOCombinations (TListE <String>*, TListE <String>*, TListE <String>*, int);
    
  public:
    
    ProcessEpitopesAndLINGOs ();
    ProcessEpitopesAndLINGOs (const ProcessEpitopesAndLINGOs&);
    ProcessEpitopesAndLINGOs (const ProcessEpitopesAndLINGOs*);
    
    ~ProcessEpitopesAndLINGOs ();
    
    void                              FilenameIn (String*);
    void                              FilenameOut (String*);
    void                              LigandEpitopeLINGO (TListE <LigandEpitopeDataLINGO>*);
    void                              FilenameSMI (String*);
    
    String*                           FilenameIn (void);
    String*                           FilenameOut (void);
    TListE <LigandEpitopeDataLINGO>*  LigandEpitopeLINGO (void);
    String*                           FilenameSMI (void);
    
    bool                              LoadDataLigandEpitope (void);
    bool                              LoadDataLigandEpitopeLINGO (void);
    bool                              LoadDataSMI (void);
    
    bool                              WriteLigandEpitopeLINGO (void);
    bool                              WriteLINGOVectorEpitopes (void);
    
    bool                              HowOftenAParticularLingoCombinationIsFound (int);
    
    ProcessEpitopesAndLINGOs          operator= (const ProcessEpitopesAndLINGOs&);

};
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#endif
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//